import os

from django.conf import settings
from django.core.files.storage import Storage

# 1. 定义自己的文件存储类，改写其url方法
from rest_framework.exceptions import APIException


class FastDFSStorage(Storage):
    def url(self, name):
        return os.path.join(settings.FDFS_BASE_URL, name)

    def save(self, name, content, max_length=None):
        # 1. 导入FDSF客服端类
        from fdfs_client.client import Fdfs_client
        # 2. 利用配置文件创建一个FDSF客服端实例对象
        client = Fdfs_client(settings.FDFS_CLIENT_CONF)
        # 3. 通过客服端实例的upload_by_filename的方法上传文件
        print(name)
        result = client.upload_by_buffer(content.read())
        # 4. 如果上传失败抛出APIException的异常
        if 'success' not in result['Status']:
            raise APIException('上传文件到fastDFS失败')
        # 5. 如果上传成功返回文件的名字
        return result['Remote file_id']